#ifndef __CE_GFX_GL20_EFFECT_GL20_H__
#define __CE_GFX_GL20_EFFECT_GL20_H__

#include <export.h>
#include <gfx/ieffect.h>
#include <gfx/gl20/effecttechnique_gl20.h>
#include <gfx/levelofdetail.h>
#include <GL/glew.h>
#include <vector>


/**
 * @brief OpenGL 2.0 implemenation of the iEffect interface
 */
class ceEffectGL20 : public iEffect
{
  CE_OBJECT
private:
	ceLevelOfDetail<iEffectTechnique>  _techniques;

public:
  ceEffectGL20 ();
  virtual ~ceEffectGL20 ();

  virtual void ClearEffectPrograms ();
	virtual void AddEffectTechnique (iEffectTechnique* program);
	virtual bool RemoveEffectTechnique (iEffectTechnique* program);
  virtual unsigned GetNumberOfEffectPrograms() const;
	iEffectTechnique* GetEffectProgram (unsigned idx);

  virtual void SetSolver (iLevelOfDetailSolver* solver);
	virtual iEffectTechnique* Eval (float distance, float size);
};

#endif // __CE_GFX_GL20_EFFECT_GL20_H__
